package com.briup.day18;


import java.io.*;
import java.nio.charset.Charset;

/**
 *
 * 转换流： 1.（文本文件）可以将字节流转换为字符流 为了方便读一行数据或者写一行数据
 *         2.但如何涉及编码格式不同。转换流转换过程可以指定对应的编码格式
 * @author lining
 * @date 2024/1/30 10:00
 */
public class TestChange {
    //阅读文章方法  in包含其实就是文本文件 in(GBK)
    public void readArticle(InputStream in) throws Exception {
        //实现读取一行。每次输出文章一行内容
        //编写代码实现将字节输入流转换为字符输入流
        Reader isr = new InputStreamReader(in,"GBK");//这个是一个字符输入流对象
        BufferedReader br = new BufferedReader(isr);
        String line = null;
        while((line = br.readLine()) != null){//line(utf-8)
            //PrintStream流的写操作
            System.out.println(line);
        }
        //关闭流
        br.close();//br.close-->isr.close-->in.close
    }
    //写出多行数据表示文章内容
    public void writeArticle(OutputStream out){
        //写的数据，一行的特点
        PrintStream ps = new PrintStream(out);
        ps.println("第一行");
        ps.println("第二行");
        //刷新流
        ps.flush();
        //关闭流
        ps.close();
    }
    //追加方式写多行信息到文件中
    public void writeArticle2(OutputStream out) throws Exception{
        //写的数据，一行的特点 newLine(); \n\r
        Writer osw = new OutputStreamWriter(out,"GBK");
        BufferedWriter bw = new BufferedWriter(osw);
        for (int i = 0; i < 5; i++) {
            bw.write("第"+i+"行");//utf-8
            bw.newLine();
        }
        //关闭流（刷新流）
        bw.close();
    }



    public void method() throws Exception{
        //utf-8  gbk
        String s = "中";
        byte[] datas = s.getBytes("utf-8");//3个字节
        //汉字----GBK-》01001 编码
        byte[] datas2 = s.getBytes("gbk");//2个字节
        //01010--GBK-》汉字  解码
        String s2 = new String(datas2, "gbk");
        System.out.println(s2);

    }


    //控制台查看乱码： 编码 解码格式不同
    public static void main(String[] args) throws Exception {
        String name = Charset.defaultCharset().name();
        System.out.println(name);
        TestChange t = new TestChange();
        FileInputStream fis = new FileInputStream("gbk.txt");
        //t.readArticle(fis);
        FileOutputStream fos = new FileOutputStream("gbk.txt",true);
        t.writeArticle2(fos);
    }
}
